/*
 * Copyright (c) zhg2yqq.com Corp.
 * All Rights Reserved.
 */
package com.zhg2yqq.wheels.log.annotation;

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import org.springframework.core.annotation.AliasFor;

/**
 * 记录日志
 *
 * @author zhg2yqq, 2022年11月30日
 * @version zhg2yqq v1.0
 */
@Retention(RUNTIME)
@Target(METHOD)
@Repeatable(OperationLog.OperationLogs.class)
public @interface OperationLog {
    /**
     * 操作名称
     */
    @AliasFor("name")
    String[] value() default {};

    /**
     * 操作名称
     */
    @AliasFor("value")
    String[] name() default {};

    /**
     * 所属模块
     */
    String module() default "";

    /**
     * 是否记录日志，默认true
     */
    boolean enable() default true;

    /**
     * 是否记录参数，默认true
     */
    boolean logParameter() default true;

    /**
     * 需要忽略的参数名，例如：password、user.password
     */
    String[] ignoreParameter() default {};

    /**
     * 是否记录结果，默认true
     */
    boolean logReturn() default true;

    /**
     * 需要忽略的参数名，例如：password、user.password
     */
    String[] ignoreReturn() default {};

    /**
     * 记录日志附加额外信息
     */
    String[] extra() default {};

    @Retention(RUNTIME)
    @Target(METHOD)
    @interface OperationLogs {
        OperationLog[] value();
    }
}
